Switch für Ausnahmen eines Funktionsbausteins [ABAP740]
Seit Release ABAP740 gibt es die Anweisung SWITCH. Sehr anschaulich beschrieben im Blog von Horst Keller: ABAP News for Release 7.40 – Constructor Operators COND and SWITCH
Was mich bei Funktionsbausteinen schon immer gestört hat ist, dass man bei der sinnvollen Protokollierung von Returncodes von Funktionsbausteinen umständliche CASE-Konstrukte benötigt. Natürlich nur, wenn der Funktionsbaustein bei einem Fehler lediglich RAISE EXCEPTION verwendet aber nicht MESSAGE RAISING. Und Ersteres ist leider sehr häufig der Fall.
Mit dem neuen Feature SWITCH jedenfalls lässt sich ein Konstrukt bauen, das immer noch nicht schön ist, jedoch einigermaßen gut verwendbar. Hier am Beispiel von Funktionsbaustein CO_RU_CONFIRMATION, der schön viele Ausnahmen hat:
"Rückmeldung buchen
CALL FUNCTION 'CO_RU_CONFIRMATION'
EXPORTING
afrud_imp = ls_afrud
aktyp_imp = 'H'
commit_flag = 'X'
no_dialog_flag = 'X'
rueck_imp = ls_afrud-rueck
split_imp = ls_afrud-split
call_from_list = ' '
EXCEPTIONS
confirmation_not_allowed = 1
conf_canceled = 2
different_key = 3
interrupt_by_user = 4
key_not_defined = 5
material_data_not_found = 6
missing_authority = 7
new_status_not_possible = 8
not_allowed = 9
not_found = 10
operation_not_found = 11
operation_not_selectable = 12
order_already_locked = 13
order_category_not_valid = 14
order_deleted = 15
order_not_found = 16
order_without_operation = 17
predec_not_confirmed = 18
sequence_not_found = 19
table_entry_not_found = 20
unit_conversion_not_possible = 21
conf_data_false = 22
conf_date_in_future = 23
standard_conf_not_possible = 24
work_center_not_found = 25
conversion_error = 26
order_data_not_found = 27
wrong_aktyp = 28
split_not_found = 29
OTHERS = 30.
IF sy-subrc = 0.
COMMIT WORK.
ELSE.
data(subrc) = sy-subrc.
"Fehler
RAISE EXCEPTION TYPE zcx_hkv_pp_mig_general
MESSAGE ID 'OO'
NUMBER '000'
WITH 'Fehler CO_RU_CONFIRMATION:'
|{ subrc }|
SWITCH #( subrc
WHEN 1 THEN 'confirmation_not_allowed '
WHEN 2 THEN 'conf_canceled '
WHEN 3 THEN 'different_key '
WHEN 4 THEN 'interrupt_by_user '
WHEN 5 THEN 'key_not_defined '
WHEN 6 THEN 'material_data_not_found '
WHEN 7 THEN 'missing_authority '
WHEN 8 THEN 'new_status_not_possible '
WHEN 9 THEN 'not_allowed '
WHEN 10 THEN 'not_found '
WHEN 11 THEN 'operation_not_found '
WHEN 12 THEN 'operation_not_selectable '
WHEN 13 THEN 'order_already_locked '
WHEN 14 THEN 'order_category_not_valid '
WHEN 15 THEN 'order_deleted '
WHEN 16 THEN 'order_not_found '
WHEN 17 THEN 'order_without_operation '
WHEN 18 THEN 'predec_not_confirmed '
WHEN 19 THEN 'sequence_not_found '
WHEN 20 THEN 'table_entry_not_found '
WHEN 21 THEN 'unit_conversion_not_possible '
WHEN 22 THEN 'conf_data_false '
WHEN 23 THEN 'conf_date_in_future '
WHEN 24 THEN 'standard_conf_not_possible '
WHEN 25 THEN 'work_center_not_found '
WHEN 26 THEN 'conversion_error '
WHEN 27 THEN 'order_data_not_found '
WHEN 28 THEN 'wrong_aktyp '
WHEN 29 THEN 'split_not_found '
WHEN 30 THEN 'OTHERS' ).
Zusammen mit dem Blockmarkiermodus (ALT-Taste während der Markierung des Quelltextes gedrückt halten) lässt sich auf diese Weise einfach eine saubere Protokollierung programmieren. Leider trotzdem sehr schade, dass man nicht mit Hilfe eines ABAP-Befehls den Text bzw. die Ausnahme erhalten kann.
PS: Der Zusatz MESSAGE zur Anweisung RAISE EXCEPTION ist erst ab Release ABAP750 vorhanden… Siehe Beitrag Ausnahmen mit T100-Nachricht
- Automatisches Eingabefeld [SAPGUI] - 9. Oktober 2025
- So verhinderst du Jobstarts zur falschen Zeit - 15. September 2025
- [apple] iCloud-Photos herunterladen - 21. Juli 2025



Ich überlege gerade, ob man nicht eine Methode bauen könnte, die anhand des Fuba-Namens aus der Tabelle FUPARAREF den Wert aus Spalte PARAMETER mit PARAMTYPE = X und PPOSITION = sy-subrc ermittelt und daraus dann eine Message generiert… Aber das würde nur funktionieren, wenn der Fuba am besten über Muster ins Coding einkopiert und nicht an den Wertzuweisungen zu den Exceptions herumgespielt wurde.
Das ist genau das entscheidende Problem… 🙁
Zudem kann ein Funktionsbaustein auch noch nachträglich geändert werden und es kann eine Ausnahme hinzukommen oder wegfallen. Dann würden auch über Muster eingefügte Aufrufe nicht mehr passen. Eine falsche Fehlermeldung ist meistens schlimmer, als gar keine.